package com.ruoyi.wbgame.service.impl;

import java.util.List;

import com.ruoyi.wbgame.domain.*;
import com.ruoyi.wbgame.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.wbgame.service.IWbQuestionService;
import com.ruoyi.common.core.text.Convert;
import org.springframework.transaction.annotation.Transactional;

/**
 * 问题Service业务层处理
 * 
 * @author guguofu
 * @date 2021-04-16
 */
@Service
public class WbQuestionServiceImpl implements IWbQuestionService 
{
    @Autowired
    private WbQuestionMapper wbQuestionMapper;
    @Autowired
    private WbOptionMapper wbOptionMapper;

    /**
     * 查询问题
     * 
     * @param questionId 问题ID
     * @return 问题
     */
    @Override
    public WbQuestion selectWbQuestionById(Long questionId)
    {
        WbQuestion wbQuestion = wbQuestionMapper.selectWbQuestionById(questionId);
        // 可以使用xml中的关联映射
        return wbQuestion;
    }

    /**
     * 查询问题列表
     * 
     * @param wbQuestion 问题
     * @return 问题
     */
    @Override
    public List<WbQuestion> selectWbQuestionList(WbQuestion wbQuestion)
    {
        return wbQuestionMapper.selectWbQuestionList(wbQuestion);
    }

    /**
     * 新增问题    ？？ 数据校验和错误处理  ？？
     * 
     * @param wbQuestion 问题
     * @return 结果
     */
    @Override
    @Transactional
    public int insertWbQuestion(WbQuestion wbQuestion)
    {
        int row = wbQuestionMapper.insertWbQuestion(wbQuestion);            // 将问题内容添加
        List<WbOption> options = wbQuestion.getOptions();                   // 选项list
        List<Boolean> optionRW = wbQuestion.getOptionRW();                  // 选项的正误list
        Long questionId = wbQuestion.getQuestionId();                       // 问题id
        for (int i = 0; i < options.size(); i++) {                          // 添加正确和错误的关联
            WbOption wbOption = options.get(i);
            wbOption.setQuestionId(questionId);                             // 设置问题id关联
            if (optionRW.get(i)==null||optionRW.get(i)==false){             // 设置选项的正确性
                wbOption.setIsRight(0);
            }else if (optionRW.get(i)==true){
                wbOption.setIsRight(1);
            }
            wbOptionMapper.insertWbOption(wbOption);                         // 将选项插入选项表
        }
        return row;
    }

    /**
     * 修改问题         ？？ 数据校验和错误处理  ？？
     * 
     * @param wbQuestion 问题
     * @return 结果
     */
    @Override
    @Transactional
    public int updateWbQuestion(WbQuestion wbQuestion)
    {
        int row = wbQuestionMapper.updateWbQuestion(wbQuestion);            // 将问题内容更新
        List<WbOption> options = wbQuestion.getOptions();                   // 选项list
        List<Boolean> optionRW = wbQuestion.getOptionRW();                  // 选项的正误list
        for (int i = 0; i < options.size(); i++) {                          // 修改正确和错误的关联
            WbOption wbOption = options.get(i);
            if (optionRW.get(i)==null||optionRW.get(i)==false){             // 修改选项的正确性
                wbOption.setIsRight(0);
            }else if (optionRW.get(i)==true){
                wbOption.setIsRight(1);
            }
            wbOptionMapper.updateWbOption(wbOption);                         // 更新选项表
        }
        return row;
    }
    /**
     * 删除一组问题
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteWbQuestionByIds(String ids)
    {
        String[] idsStr = Convert.toStrArray(ids);
        // 1. 从关联的选项表中删除
        wbOptionMapper.deleteWbOptionByQuestionIds(idsStr);
        // 2. 从问题表中删除
        int row = wbQuestionMapper.deleteWbQuestionByIds(idsStr);
        return row;
    }

    /**
     * 删除一个问题
     * 
     * @param questionId 问题ID
     * @return 结果
     */
    @Override
    public int deleteWbQuestionById(Long questionId)
    {
        int row = 0;
        // 1. 从关联的选项表中删除
        row = wbOptionMapper.deleteWbOptionByQuestionId(questionId);
        // 2. 从问题表中删除
        row = wbQuestionMapper.deleteWbQuestionById(questionId);

        return row;
    }
}
